Using Transaction Logs II

Using the same synthesized circuit the timing checker will be enhanced with transaction reporting:
        -- verify the setup time on W and R signals
        -- we assume W and R are asserted alternatingly
        
        timing_check: process
        
           variable w_asserted: time;
           variable r_asserted: time;

        begin

           -- wait for DUT to be reset
           wait until RST = '1';
           wait until RST = '0';

           -- verify write access                     
           wait until W = '0';
           w_asserted := now;
           wait until W = '1';

           print("I@TB: detected W access");

           assert (now - w_asserted) >= tSU_W
             report "E@TB: W setup time too short"
             severity Error;


           -- verify read access                      
           wait until R = '0';
           r_asserted := now;
           wait until R = '1';  

           print("I@TB: detected R access");

           assert (now - r_asserted) >= tSU_R
             report "E@TB: R setup time too short"
             severity Error;

        end process timing_check;

Rerunning the simulation, the problem becomes immediately apparent:

        VSIM 31> run -all
        # I@TB: detected W access
        # I@TB: detected R access
        VSIM 32>

The transaction log contains an insufficient number of write and read cycles. The problem can be fixed in the timing checker as shown:

           -- wait for DUT to be reset
           wait until RST = '1';
           wait until RST = '0';

           loop  
              -- verify write access                     
              wait until W = '0';

              ...

           end loop;

        end process timing_check;

And now the problem in the circuit is detected:

        VSIM 8> run -all
        # I@TB: detected W access
        # I@TB: detected R access
        # I@TB: detected W access
        # I@TB: detected R access
        # ** Error: E@TB: R setup time too short
        #    Time: 64 ns  Iteration: 0
        # I@TB: detected W access
        VSIM 9>

In order to effectively work with transaction logs it's helpful to write them to files. Here is a way to do this with the MTI simulator:

        vsim tb1 -c -do "run 400 ns ; exit -f" > sim.log

These logs should be kept for each test, so that in a later simulation run the current log can be automatically compared with the golden log.

Below are the files which have been simulated in this section:

txt_util.vhd hang2.vhd tloop.vhd
txt_util.vhd hang2.vhd tloop.vhd


previous Index next